Several methods exist for correcting network transmission errors. One is commonly referred to as Automatic Repeat Request (ARQ). Standard communication protocols, such as the Transmission Control Protocol (TCP), use ARQ to correct transmission errors by asking a source host to retransmit lost packets. Unfortunately, ARQ causes significant delay in transmitting real-time multimedia data, which can result in dropped video frames, audio degradation, etc. This is one reason that TCP is often not suitable for multimedia applications.
Another method is Forward Error Correction (FEC). FEC coding (also called channel coding) adds redundant data, called parity bytes, into a data stream prior to transmission. Using this redundancy, the FEC algorithm can detect and even correct the errors caused by corruption of the data channel without having to request retransmission of a packet.
FEC coding is often used in conjunction with the User Datagram Protocol (UDP), which, in contrast to TCP, provides a way for applications to send raw IP datagrams without having to establish a connection. UDP supports quick connections and transportation, but does not guarantee that a UDP datagram will ever reach its final destination. Internet phone applications and real-time video conferencing systems often use UDP because they can tolerate a small fraction of packet loss or out-of-order reception.
FEC coding, alone, is generally not sufficient to eliminate transmission errors, since many such errors result from the loss of whole network packets rather than the corruption of individual bits or bytes. Packets can be lost for many reasons, such as a failure in a switch or end-site device buffer. Encoding redundant data within a packet does not help restore the packet if it is completely lost.
Accordingly, techniques have been developed for recovering whole packets. One approach is interleave each network packet with data from a series of FEC-encoded packets. Hence, if a network packet is lost, then only a single byte from each of the FEC-encoded packets is lost. The lost bytes can then be recovered using redundant information in adjacent packets.
Unfortunately, such conventional approaches to correcting whole packet loss introduce considerable latency, which can also be a significant problem in real-time multimedia transmission.